#ifndef LIBZMODEM_ZMODEM_H
#define LIBZMODEM_ZMODEM_H

#include <stdint.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Result codes */
#define RZSZ_NO_ERROR (0)
#define RZSZ_ERROR    (1)

/* Flags */
#define RZSZ_FLAGS_NONE (0x0000)

/**
 * @brief 运行ZMODEM接收器进行文件传输
 *
 * @param flash_addr 目标Flash起始地址（用于存储接收的文件数据）
 * @param flags      操作标志位，可取值：
 *                   - RZSZ_FLAGS_NONE: 无特殊标志
 *                   - 其他扩展标志（需根据具体实现定义）
 *
 * @return size_t 成功传输的文件总字节数
 *                当发生错误时返回0（需根据具体实现确定错误处理方式）
 *
 * @note 1. 文件将直接写入flash_addr指定的Flash地址
 *       2. 需确保目标Flash区域已正确擦除
 *       3. 文件覆盖操作不会检查原有数据
 *       4. 传输过程不进行文件名合法性校验
 *       5. 不支持断点续传功能
 *       6. 不会检查传输过程中文件大小是否超出Flash容量
 */
size_t zmodem_receive(uint32_t flash_addr, uint32_t flags);

#ifdef __cplusplus
}
#endif

#endif
